// Copyright 2025 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Code generated by sidekick. DO NOT EDIT.

/// A dyn-compatible, crate-private version of [super::BareMetalSolution].
#[async_trait::async_trait]
pub trait BareMetalSolution: std::fmt::Debug + Send + Sync {
    async fn list_instances(
        &self,
        req: crate::model::ListInstancesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListInstancesResponse>>;

    async fn get_instance(
        &self,
        req: crate::model::GetInstanceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Instance>>;

    async fn update_instance(
        &self,
        req: crate::model::UpdateInstanceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn rename_instance(
        &self,
        req: crate::model::RenameInstanceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Instance>>;

    async fn reset_instance(
        &self,
        req: crate::model::ResetInstanceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn start_instance(
        &self,
        req: crate::model::StartInstanceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn stop_instance(
        &self,
        req: crate::model::StopInstanceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn enable_interactive_serial_console(
        &self,
        req: crate::model::EnableInteractiveSerialConsoleRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn disable_interactive_serial_console(
        &self,
        req: crate::model::DisableInteractiveSerialConsoleRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn detach_lun(
        &self,
        req: crate::model::DetachLunRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_ssh_keys(
        &self,
        req: crate::model::ListSSHKeysRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListSSHKeysResponse>>;

    async fn create_ssh_key(
        &self,
        req: crate::model::CreateSSHKeyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::SSHKey>>;

    async fn delete_ssh_key(
        &self,
        req: crate::model::DeleteSSHKeyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn list_volumes(
        &self,
        req: crate::model::ListVolumesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListVolumesResponse>>;

    async fn get_volume(
        &self,
        req: crate::model::GetVolumeRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Volume>>;

    async fn update_volume(
        &self,
        req: crate::model::UpdateVolumeRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn rename_volume(
        &self,
        req: crate::model::RenameVolumeRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Volume>>;

    async fn evict_volume(
        &self,
        req: crate::model::EvictVolumeRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn resize_volume(
        &self,
        req: crate::model::ResizeVolumeRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_networks(
        &self,
        req: crate::model::ListNetworksRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListNetworksResponse>>;

    async fn list_network_usage(
        &self,
        req: crate::model::ListNetworkUsageRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListNetworkUsageResponse>>;

    async fn get_network(
        &self,
        req: crate::model::GetNetworkRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Network>>;

    async fn update_network(
        &self,
        req: crate::model::UpdateNetworkRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn create_volume_snapshot(
        &self,
        req: crate::model::CreateVolumeSnapshotRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::VolumeSnapshot>>;

    async fn restore_volume_snapshot(
        &self,
        req: crate::model::RestoreVolumeSnapshotRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_volume_snapshot(
        &self,
        req: crate::model::DeleteVolumeSnapshotRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn get_volume_snapshot(
        &self,
        req: crate::model::GetVolumeSnapshotRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::VolumeSnapshot>>;

    async fn list_volume_snapshots(
        &self,
        req: crate::model::ListVolumeSnapshotsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListVolumeSnapshotsResponse>>;

    async fn get_lun(
        &self,
        req: crate::model::GetLunRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Lun>>;

    async fn list_luns(
        &self,
        req: crate::model::ListLunsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListLunsResponse>>;

    async fn evict_lun(
        &self,
        req: crate::model::EvictLunRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn get_nfs_share(
        &self,
        req: crate::model::GetNfsShareRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::NfsShare>>;

    async fn list_nfs_shares(
        &self,
        req: crate::model::ListNfsSharesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListNfsSharesResponse>>;

    async fn update_nfs_share(
        &self,
        req: crate::model::UpdateNfsShareRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn create_nfs_share(
        &self,
        req: crate::model::CreateNfsShareRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn rename_nfs_share(
        &self,
        req: crate::model::RenameNfsShareRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::NfsShare>>;

    async fn delete_nfs_share(
        &self,
        req: crate::model::DeleteNfsShareRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_provisioning_quotas(
        &self,
        req: crate::model::ListProvisioningQuotasRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListProvisioningQuotasResponse>>;

    async fn submit_provisioning_config(
        &self,
        req: crate::model::SubmitProvisioningConfigRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::SubmitProvisioningConfigResponse>>;

    async fn get_provisioning_config(
        &self,
        req: crate::model::GetProvisioningConfigRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ProvisioningConfig>>;

    async fn create_provisioning_config(
        &self,
        req: crate::model::CreateProvisioningConfigRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ProvisioningConfig>>;

    async fn update_provisioning_config(
        &self,
        req: crate::model::UpdateProvisioningConfigRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ProvisioningConfig>>;

    async fn rename_network(
        &self,
        req: crate::model::RenameNetworkRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Network>>;

    async fn list_os_images(
        &self,
        req: crate::model::ListOSImagesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListOSImagesResponse>>;

    async fn list_locations(
        &self,
        req: location::model::ListLocationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::ListLocationsResponse>>;

    async fn get_location(
        &self,
        req: location::model::GetLocationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::Location>>;

    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    fn get_polling_error_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_error_policy::PollingErrorPolicy>;

    fn get_polling_backoff_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_backoff_policy::PollingBackoffPolicy>;
}

/// All implementations of [super::BareMetalSolution] also implement [BareMetalSolution].
#[async_trait::async_trait]
impl<T: super::BareMetalSolution> BareMetalSolution for T {
    /// Forwards the call to the implementation provided by `T`.
    async fn list_instances(
        &self,
        req: crate::model::ListInstancesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListInstancesResponse>> {
        T::list_instances(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_instance(
        &self,
        req: crate::model::GetInstanceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Instance>> {
        T::get_instance(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_instance(
        &self,
        req: crate::model::UpdateInstanceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::update_instance(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn rename_instance(
        &self,
        req: crate::model::RenameInstanceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Instance>> {
        T::rename_instance(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn reset_instance(
        &self,
        req: crate::model::ResetInstanceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::reset_instance(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn start_instance(
        &self,
        req: crate::model::StartInstanceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::start_instance(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn stop_instance(
        &self,
        req: crate::model::StopInstanceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::stop_instance(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn enable_interactive_serial_console(
        &self,
        req: crate::model::EnableInteractiveSerialConsoleRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::enable_interactive_serial_console(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn disable_interactive_serial_console(
        &self,
        req: crate::model::DisableInteractiveSerialConsoleRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::disable_interactive_serial_console(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn detach_lun(
        &self,
        req: crate::model::DetachLunRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::detach_lun(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_ssh_keys(
        &self,
        req: crate::model::ListSSHKeysRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListSSHKeysResponse>> {
        T::list_ssh_keys(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_ssh_key(
        &self,
        req: crate::model::CreateSSHKeyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::SSHKey>> {
        T::create_ssh_key(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_ssh_key(
        &self,
        req: crate::model::DeleteSSHKeyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_ssh_key(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_volumes(
        &self,
        req: crate::model::ListVolumesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListVolumesResponse>> {
        T::list_volumes(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_volume(
        &self,
        req: crate::model::GetVolumeRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Volume>> {
        T::get_volume(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_volume(
        &self,
        req: crate::model::UpdateVolumeRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::update_volume(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn rename_volume(
        &self,
        req: crate::model::RenameVolumeRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Volume>> {
        T::rename_volume(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn evict_volume(
        &self,
        req: crate::model::EvictVolumeRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::evict_volume(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn resize_volume(
        &self,
        req: crate::model::ResizeVolumeRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::resize_volume(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_networks(
        &self,
        req: crate::model::ListNetworksRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListNetworksResponse>> {
        T::list_networks(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_network_usage(
        &self,
        req: crate::model::ListNetworkUsageRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListNetworkUsageResponse>> {
        T::list_network_usage(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_network(
        &self,
        req: crate::model::GetNetworkRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Network>> {
        T::get_network(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_network(
        &self,
        req: crate::model::UpdateNetworkRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::update_network(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_volume_snapshot(
        &self,
        req: crate::model::CreateVolumeSnapshotRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::VolumeSnapshot>> {
        T::create_volume_snapshot(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn restore_volume_snapshot(
        &self,
        req: crate::model::RestoreVolumeSnapshotRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::restore_volume_snapshot(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_volume_snapshot(
        &self,
        req: crate::model::DeleteVolumeSnapshotRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_volume_snapshot(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_volume_snapshot(
        &self,
        req: crate::model::GetVolumeSnapshotRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::VolumeSnapshot>> {
        T::get_volume_snapshot(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_volume_snapshots(
        &self,
        req: crate::model::ListVolumeSnapshotsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListVolumeSnapshotsResponse>> {
        T::list_volume_snapshots(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_lun(
        &self,
        req: crate::model::GetLunRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Lun>> {
        T::get_lun(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_luns(
        &self,
        req: crate::model::ListLunsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListLunsResponse>> {
        T::list_luns(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn evict_lun(
        &self,
        req: crate::model::EvictLunRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::evict_lun(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_nfs_share(
        &self,
        req: crate::model::GetNfsShareRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::NfsShare>> {
        T::get_nfs_share(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_nfs_shares(
        &self,
        req: crate::model::ListNfsSharesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListNfsSharesResponse>> {
        T::list_nfs_shares(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_nfs_share(
        &self,
        req: crate::model::UpdateNfsShareRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::update_nfs_share(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_nfs_share(
        &self,
        req: crate::model::CreateNfsShareRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_nfs_share(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn rename_nfs_share(
        &self,
        req: crate::model::RenameNfsShareRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::NfsShare>> {
        T::rename_nfs_share(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_nfs_share(
        &self,
        req: crate::model::DeleteNfsShareRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_nfs_share(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_provisioning_quotas(
        &self,
        req: crate::model::ListProvisioningQuotasRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListProvisioningQuotasResponse>> {
        T::list_provisioning_quotas(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn submit_provisioning_config(
        &self,
        req: crate::model::SubmitProvisioningConfigRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::SubmitProvisioningConfigResponse>>
    {
        T::submit_provisioning_config(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_provisioning_config(
        &self,
        req: crate::model::GetProvisioningConfigRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ProvisioningConfig>> {
        T::get_provisioning_config(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_provisioning_config(
        &self,
        req: crate::model::CreateProvisioningConfigRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ProvisioningConfig>> {
        T::create_provisioning_config(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_provisioning_config(
        &self,
        req: crate::model::UpdateProvisioningConfigRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ProvisioningConfig>> {
        T::update_provisioning_config(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn rename_network(
        &self,
        req: crate::model::RenameNetworkRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Network>> {
        T::rename_network(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_os_images(
        &self,
        req: crate::model::ListOSImagesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListOSImagesResponse>> {
        T::list_os_images(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_locations(
        &self,
        req: location::model::ListLocationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::ListLocationsResponse>> {
        T::list_locations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_location(
        &self,
        req: location::model::GetLocationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::Location>> {
        T::get_location(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::get_operation(self, req, options).await
    }

    fn get_polling_error_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_error_policy::PollingErrorPolicy> {
        T::get_polling_error_policy(self, options)
    }

    fn get_polling_backoff_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_backoff_policy::PollingBackoffPolicy> {
        T::get_polling_backoff_policy(self, options)
    }
}
